package interpreteur.echecs;

import static interpreteur.echecs.Pieces.Piece.Couleur.*;

public class Pieces {

    private static final int[] ROI_TYPE_DEPL = {-11, -10, -9, -1, 1, 9, 10, 11};
    private static final int[] CAVALIER_DEPL = {-21, -19, -12, -8, 8, 12, 19, 21};
    private static final int[] PION_BLANC_DEPL = {10, 9, 11};
    private static final int[] PION_NOIR_DEPL = {-10, -9, -11};
    private static final int[] TOUR_DEPL = {10, 1, -10, -1};
    private static final int[] FOU_DEPL = {11, -9, -11, 9};

    public enum Piece {

        FOU_NOIR(NOIR, FOU_DEPL, true),
        ROI_NOIR(NOIR, ROI_TYPE_DEPL, false),
        CAVALIER_NOIR(NOIR, CAVALIER_DEPL, false),
        PION_NOIR(NOIR, PION_NOIR_DEPL, false),
        DAME_NOIRE(NOIR, ROI_TYPE_DEPL, true),
        TOUR_NOIRE(NOIR, TOUR_DEPL, true),
        FOU_BLANC(BLANC, FOU_DEPL, true),
        ROI_BLANC(BLANC, ROI_TYPE_DEPL, false),
        CAVALIER_BLANC(BLANC, CAVALIER_DEPL, false),
        PION_BLANC(BLANC, PION_BLANC_DEPL, false),
        DAME_BLANCHE(BLANC, ROI_TYPE_DEPL, true),
        TOUR_BLANCHE(BLANC, TOUR_DEPL, true);
        private final Couleur _couleur;
        private final int[] _deplacement;
//        private final boolean _rayon_action;

        public enum Couleur {

            BLANC, NOIR
        }

        private Piece(final Couleur pCouleur, int[] pDeplacement, boolean pRayonDAction) {
            _couleur = pCouleur;
            _deplacement = pDeplacement;
//            _rayon_action = pRayonDAction;
        }

        public Couleur getCouleur() {
            return _couleur;
        }

        public int[] getDeplacement() {
            return _deplacement;
        }

//        public boolean estFouTourOuDame() {
//            return _rayon_action;
//        }
        @Override
        public String toString() {
            super.toString();
            return "[" + name() + "]";
        }
    }
}
